package com.itheima.reggie.common;

import com.itheima.reggie.exception.CustomException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * @auther :XJY
 * @date :2022/8/15$ 19:49$
 * @description : 全局异常处理器  将服务器的异常统一到此处进行处理
 */

//新增了@ControllerAdvice 注解，
// 可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute，
// 并应用到所有@RequestMapping中
@RestControllerAdvice(annotations = {Controller.class, RestController.class}) //拦截哪一类的Controller方法
@Slf4j
public class GlobalExceptionHandler {

    /***
     *功能描述 : 异常处理方法
     *@return : com.itheima.reggie.common.R<java.lang.String>
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex) {
        //获取异常信息
        String message = ex.getMessage();
        log.info("异常信息=>{}",message);
        //判断异常信息的内容
        if (message.contains("Duplicate entry")) {
            String[] s = message.split(" ");
            String errorMsg = s[2];
            log.info("错误信息=>{}",message);
            //throw ex;
            return R.error(errorMsg + "已存在");
        }

        return R.error("未知错误");
    }


    /**
     * 处理自定义异常CustomException
     * @param ex
     * @return
     */
    @ExceptionHandler(CustomException.class)
    public R<String> exceptionHandler(CustomException ex) {
        //获取异常信息
        String message = ex.getMessage();
        log.info("异常信息=>{}",message);
        return R.error(message);
    }



}
